欢迎来到信息技术技能项目的服务器

FAT32目录项和FAT表
源文件下载

FAT32目录项和FAT表
既然是想要了解目录首先就要知道他的根目录位置算法:算法如下↓
 
图中,为DBR保留扇区数,为每FAT扇区数,


DBR和保留扇区

FAT1

FAT2

根目录

DATA

根据这张图我们就很清楚的知道了算法*2+换成十进制就是1,054+7,665*2=16384
 
↑就是FAT32的根目录

 

FAT表位置也一清二楚
 
FAT表
我们先看一下FAT表
 
首先了解一下FAT32,因为是FAT 32所以顾名思义FAT表一项FAT为32Bit,也就是4字节。
并且如上图一样,第一个FAT项称为0号FAT项:第二个FAT项为1号FAT项......(从2号FAT项开始,2号FAT项表示第二簇,3号FAT项表示第三簇)
0项.这一项其实没有什么意义,就像是一个标志,FAT表的开始。(一个固定值)

  1. .这一项表示这记录脏标记,说明文件系统没有正常卸载或者有错误, 一般为FF FF FF FFH或FF FF FF 0FH (不知道具体是什么样的,这里就不详细写了)

 

  1. 这一项表示根目录,因为是第二项,所以根目录就在2簇,
  1. 从三项开始就是记入文件的位置了。

 

这里要举两个栗子:
栗一:当文件小于1簇时
就会在他的文件所在簇数对应的FAT项中写入FF FF FF 0FH 表示结束比如这个草原色的第三项FAT表项这样就表示一簇结束。(也就是文件的最后一簇)

栗二:当文件大于1簇时,他就会变成这样
这里的第5项FAT表项出现的就不是FF FF FF 0FH了,而是,换成10进制就是6,他表示的是文件接下去一簇的位置是6簇,我们看看第6项FAT表项就表示着文件下一簇为7簇。就这样,文件一共占到第52项FAT老样子,他换成10进制就是53,我们看看53项FAT表项出现了结束标识,这就表明文件在53簇结束了54簇就没有这个文件了

 

坏簇
有时候会出现这个标识,目前FAT表项为坏簇。

文件碎片
 
当出现第二项FAT表映射的并不是第3簇,(图中映射的是第5簇)则文件出现了碎片,(图中第2簇衔接第5簇)
注:图中的第二簇为目录表项,所以当目录表项中的目录超过1簇数量时,目录表项也会出现碎片

目录项
短文件名目录项
现在我们知道了文件在FAT表中的排列,但是FAT表的第哪一项属于文件的第1簇,则是要从目录项中了解到。
 
↑这是一条根目录项
1,这一条是文件名,ASCLL码表示的,我这里创建的是一个名叫1234.txt的文件。
他的第一个字节可以表示文件是否被删除我先暂时删了这个文件,可以看到:

2,这里表示的是他的文件属性具体如下↓
01H←只读
02H←隐藏
04H←系统文件
08H←卷标
0FH←出现这个表示为长文件名目录项
00H←有时候会没有属性的情况出现
10H←目录
20H←存档
16H←这是什么呢?有兴趣就去研究一下。

 

3,撇开中间红的蓝色的值表示为时间码,具体算法我不清楚,不过在WinHex中可以按Ctrl+F12打开模板栏,选择这个来进行查看时间

4,我们来看看这个红色的,他们表示的是文件的开始簇号为高为字节,为低位,组合起来就是34 12 78 56H(WinHex中字节颠倒进行换算)换算10进制为873625686则这个就是当前文件的开始簇号(这里为了演示方便就让他那么大了,基本上小的盘高位不会用上。)

5,最后就是他的文件总字节数了,在当前目录项中如果表示为子目录(文件夹)则为00 00 00 00H

 

 

 

删除文件
删除前↓
 
删除后↓
 
1,可以看出,第一字节标上了E5标记
2,并且高位字节清零

 

长文件名目录项
接下来我放入一个文件↓

名字很长超出了文件名的11个字节的限制,我们来看看文件系统他是怎么解决的。

 
图中的所有没标颜色的内容就是长文件名目录项的内容了,但是淡蓝色的位置还是短文件目录项只不过他的文件名变成了(因为有时候有些系统不支持长文件,所以就用这个来表示)

接下来我们看看长文件名目录项
 

  1. 长文件名目录占30字节(两行)这里一共用了3这个目录项

1,第一个表示长文件名的顺序
01第一
02第二
43结束,并且是第三
当这里出现4的时候表示结束

 

2,图中所有的绿色表示这文件名的Unicode编码顺序的话我的文件名123456789abcdefjhigklnmopqrstuvwxyz.txt按照这个找下规律就清楚了
 
3,表示这文件属性
0FH←为长文件名目录

4,长文件目录校验和

5其余均为文件名

删除后全部标记为E5删除标记

 

联系我们:嘉兴市嘉善县西塘镇下西街西塘古镇下西街93弄7号 13736871933@163.com ©2018 保留所有权利